package com.yanfan.attach.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yanfan.attach.domain.DeviceDetail;
import com.yanfan.iot.domain.Device;
import com.yanfan.iot.domain.DeviceLifecyle;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 设备Mapper接口
 *
 * @author kerwincui
 * @date 2021-12-16
 */
@Repository
public interface DeviceDetailMapper extends BaseMapper<DeviceDetail> {
    /**
     * 根据设备分组的设备列表
     *
     * @param device
     * @return java.util.List<com.ruoyi.iot.domain.Device>
     * @author caijinkang
     * @date 2023/5/5 10:33
     */
    public List<DeviceDetail> newListByDeviceByGroup(DeviceDetail device);

    /**
     * 查询设备列表
     *
     * @param device 设备
     * @return 设备集合
     */
    public List<DeviceDetail> selectDeviceList(DeviceDetail device);

    /**
     * 根据userid查询产品设备列表
     *
     * @param userId
     * @return java.util.List<com.ruoyi.iot.domain.Device>
     * @author caijinkang
     * @date 2023/3/28 19:16
     */
    List<Device> findAllByUserId(@Param("userId") Integer userId);

    List<Device> findAll(@Param("categoryId") Integer categoryId);

    /**
     * 根据userid查询产品设备列表
     *
     * @param productId
     * @param userId
     * @return java.util.List<com.ruoyi.iot.domain.Device>
     * @author caijinkang
     * @date 2023/3/28 19:38
     */
    List<Device> selectDeviceByProductId(@Param("productId") Long productId, @Param("userId") Long userId);


    /**
     * 根据车间id查询所有设备
     *
     * @param workshopId
     * @param categoryId
     * @return java.util.List<com.ruoyi.common.core.domain.entity.IotDevice>
     * @author caijinkang
     * @date 2023/2/27 14:28
     */
    List<Device> findAllDeviceByWorkshopId(@Param("workshopId") Integer workshopId, @Param("categoryId") Integer categoryId);

    List<Device> searchDevice(String text);

    List<DeviceDetail> selectAllDeviceList(DeviceDetail device);

    DeviceDetail selectDeviceByDeviceId(Long deviceId);

    /**
     * 根据设备id查询当前设备的下的设备日志中属性为事件上报的个数
     *
     * @param serialNumber
     * @param beginDate
     * @param endDate
     * @return int
     * @author caijinkang
     * @date 2023/4/4 15:19
     */
    public int findIotDeviceTypeLog(@Param("serialNumber") String serialNumber, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 严重告警只要还有一条没处理，则为故障
     *
     * @param serialNumber
     * @param beginDate
     * @param endDate
     * @return int
     * @author caijinkang
     * @date 2023/4/24 17:05
     */
    public List<Integer> findIotAlertLogByStatus(@Param("serialNumber") String serialNumber, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 根据设备编号查询设备
     *
     * @param serialNumber 设备主键
     * @return 设备
     */
    DeviceDetail selectDeviceBySerialNumber(String serialNumber);


    int insert(DeviceDetail record);

    int insertSelective(DeviceDetail record);

    int updateByPrimaryKeySelective(DeviceDetail record);

    int updateByDeviceIdSelective(DeviceDetail record);

    int updateByPrimaryKey(DeviceDetail record);

    List<DeviceDetail> selectDeviceDetailList(DeviceDetail record);

    List<DeviceDetail> selectDeviceDetailShortList(DeviceDetail record);

    int updateDeviceLifecyle(DeviceLifecyle deviceLifecyle);
}
